
package grafica;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import bin.*;

import java.lang.*;
import javax.sound.sampled.Clip;
import javax.swing.*;
import javax.swing.border.LineBorder;

import java.util.Random;

//importamos las estructuras de datos
import TDAColaCP.*;
import TDAMapeo.*;

public class Pantalla extends JFrame 
{	
	//atributos
	private JPanel panelppal;
	private HashMap <Etiqueta,Etiqueta> mapeoCasilleros;
	private HashMap <Integer,JLabel> mapeo;
	private boolean terminoElJuego ;
	private JButton btnJugar;
	private JButton perdio;
	private ImageIcon BvsR;
	private JLabel loser;
	private juego J;
	private JButton btnpaul;
	private JButton btnjohn;
	private JButton btngeorge;
	private JButton btnringo;
	private JButton btnyoko;
	private ImageIcon pb;
	private ImageIcon jb;
	private ImageIcon gb;
	private ImageIcon rb;
	private ImageIcon yb;
	private beatle currentBeatle;
	private Sonido empezar;
	private Sonido perder;
	private Sonido ganar;
	private JLabel submarino;
	private JTextField nombre;
	private JLabel nomb;
	private JLabel ganaste;
	//indica el valor del puntaje
	private JLabel Puntaje;
	private JLabel PuntajeFinal;
	
	//indica puntaje requerido para crear cada beatle
	private JLabel PJ;
	private JLabel PP;
	private JLabel PG;
	private JLabel PR;
	private JLabel PY;
	
	//etiquetas del campo de juego, para insertar beatles.
		private Etiqueta l00;
		private Etiqueta l01;
		private Etiqueta l02;
		private Etiqueta l03;
		private Etiqueta l04;
		private Etiqueta l10;
		private Etiqueta l11;
		private Etiqueta l12;
		private Etiqueta l13;
		private Etiqueta l14;
		private Etiqueta l20;
		private Etiqueta l21;
		private Etiqueta l22;
		private Etiqueta l23;
		private Etiqueta l24;
		private Etiqueta l30;
		private Etiqueta l31;
		private Etiqueta l32;
		private Etiqueta l33;
		private Etiqueta l34;
		private Etiqueta l40;
		private Etiqueta l41;
		private Etiqueta l42;
		private Etiqueta l43;
		private Etiqueta l44;
		private Etiqueta l50;
		private Etiqueta l51;
		private Etiqueta l52;
		private Etiqueta l53;
		private Etiqueta l54;
		private Etiqueta l60;
		private Etiqueta l61;
		private Etiqueta l62;
		private Etiqueta l63;
		private Etiqueta l64;
		private Etiqueta l70;
		private Etiqueta l71;
		private Etiqueta l72;
		private Etiqueta l73;
		private Etiqueta l74;
		private Etiqueta l80;
		private Etiqueta l81;
		private Etiqueta l82;
		private Etiqueta l83;
		private Etiqueta l84;
		
	
	/**
	 * Pantalla
	 * @param j juego
	 */
	public Pantalla(juego j) {
			J=j;
		    mapeo = new HashMap <Integer,JLabel>();
		    mapeoCasilleros= new HashMap<Etiqueta,Etiqueta>();

		    initComponents();}

	/**
	 * initComponents
	 * inicializa los componentes
	 */
	public void initComponents() 
	{Image im = new ImageIcon(getClass().getClassLoader().getResource("gif/fondo.JPG")).getImage();
	panelppal = new JPanelConFondo(im);
	terminoElJuego = false;
	
	
	setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	setTitle("Beatles vs Stones");
	setResizable(false);
	getContentPane().setLayout(new FlowLayout());
	     
	PuntajeFinal= new JLabel();
	PuntajeFinal.setVisible(false);
	PuntajeFinal.setBounds(150,440,500,75);
	PuntajeFinal.setForeground(Color.pink);
	panelppal.add(PuntajeFinal);
	
	nomb= new JLabel("Ingresa aqua tu nombre para empezar!");
	nomb.setVisible(true);
	nomb.setEnabled(true);
	nomb.setForeground(Color.white);
	nomb.setBounds(300,100,250,15);
	panelppal.add(nomb);
	
	nombre=new JTextField();
	nombre.setVisible(true);
	nombre.setEnabled(true);
	nombre.setEditable(true);
	nombre.setBounds(310,120,200,30);
	nombre.setForeground(Color.blue);
	

	nombre.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
					J.setNombre(nombre.getText());
					nombre.setEditable(false);
					btnJugar.setEnabled(true);}});
	panelppal.add(nombre);
	
	BvsR=new ImageIcon (getClass().getClassLoader().getResource("gif/BvsR.gif"));
	btnJugar= new JButton(BvsR);
	btnJugar.setVisible(true);
	btnJugar.setEnabled(false);
	btnJugar.setBounds(310,200,200,200);
	
	btnJugar.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
					cargarPantalla();}});
	        
	panelppal.add(btnJugar);
	
	
	perdio = new JButton ("Reintentar");
	perdio.setVisible(false);
	perdio.setBounds(360,500,125,75);
	perdio.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			for (Entry<Integer, JLabel> a : mapeo.entries()) {
				a.getValue().setVisible(false);
				panelppal.remove(a.getValue());}
			mapeo = new HashMap <Integer,JLabel>();
			reintentar();
			}});
			
	panelppal.add(perdio);
	
	loser= new JLabel();
	loser.setIcon(new ImageIcon(getClass().getClassLoader().getResource("gif/perder.jpg")));

	loser.setVisible(false);
	loser.setBounds(200, 100,500 ,351);
	panelppal.add(loser);
	
	panelppal.setPreferredSize(new Dimension(800, 600));
	panelppal.setLayout(null);
	

	
	Puntaje = new JLabel ("100");
	Puntaje.setBounds(35, 60, 55, 23);
	panelppal.add(Puntaje);
		
	        
	ImageIcon pb = new ImageIcon(getClass().getClassLoader().getResource("gif/paulboton.jpg"));
	btnpaul= new JButton(pb);
	btnpaul.setVisible(true);
	btnpaul.setEnabled(false);
	btnpaul.setBounds(91,15,47,50);
	
	btnpaul.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			new Sonido("seedlift").start();
			habilitarBotones();
			habilitarCampos(true);
			nuevoPaul();
			//le avisamos a tablero que creamos un beatle Paul
			
					}});
	        
	panelppal.add(btnpaul);
	
	ImageIcon jb = new ImageIcon(getClass().getClassLoader().getResource("gif/johnboton.jpg"));
	btnjohn= new JButton(jb);
	btnjohn.setVisible(true);
	btnjohn.setEnabled(false);
	btnjohn.setBounds(144,15,47,50);
	        
	btnjohn.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			new Sonido("seedlift").start();
			habilitarBotones();
			habilitarCampos(true);	
			nuevoJohn();}});
	        
	panelppal.add(btnjohn);
	
	ImageIcon gb = new ImageIcon(getClass().getClassLoader().getResource("gif/georgeboton.jpg"));
	btngeorge= new JButton(gb);
	btngeorge.setVisible(true);
	btngeorge.setEnabled(false);
	btngeorge.setBounds(197,15,47,50);
	        
	btngeorge.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			new Sonido("seedlift").start();
			habilitarBotones();
			habilitarCampos(true);	
			nuevoGeorge();}});
	        
	panelppal.add(btngeorge);
	
	ImageIcon rb = new ImageIcon(getClass().getClassLoader().getResource("gif/ringoboton.jpg"));
	btnringo= new JButton(rb);
	btnringo.setVisible(true);
	btnringo.setEnabled(false);
	btnringo.setBounds(250,15,47,50);
	        
	btnringo.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			new Sonido("seedlift").start();
			habilitarBotones();
			habilitarCampos(true);	
			nuevoRingo();}});
	        
	panelppal.add(btnringo);
	
	ImageIcon yb = new ImageIcon(getClass().getClassLoader().getResource("gif/yokoboton.jpg"));
	btnyoko= new JButton(yb);
	btnyoko.setVisible(true);
	btnyoko.setEnabled(false);
	btnyoko.setBounds(303,15,47,50);
	

	btnyoko.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			new Sonido("seedlift").start();
			habilitarBotones();
			habilitarCampos(true);	
			nuevoYoko();}});
	        
	panelppal.add(btnyoko);

	crearCampos();
	
	PP= new JLabel ("50");
	PP.setBounds(105,60,40,20);
	panelppal.add(PP);
	
	PJ= new JLabel ("100");
	PJ.setBounds(158,60,40,20);
	panelppal.add(PJ);
	
	PG= new JLabel ("150");
	PG.setBounds(211,60,40,20);
	panelppal.add(PG);
	
	PR= new JLabel ("500");
	PR.setBounds(264,60,40,20);
	panelppal.add(PR);
	
	PY= new JLabel ("150");
	PY.setBounds(317,60,40,20);
	panelppal.add(PY);
	getContentPane().add(panelppal);
	getContentPane().setEnabled(false);
	

	ganaste= new JLabel();
	
	btnjohn.setEnabled(false);
	btnpaul.setEnabled(false);
	btngeorge.setEnabled(false);
	btnringo.setEnabled(false);
	btnyoko.setEnabled(false);
	Puntaje.setVisible(false);
	setearOrdenZ();
	pack();
	}
	/**
	 * setearOrdenZ
	 * 	sirve para ordenar en el sentido z los componentes graficos
	 */
	private void setearOrdenZ (){
		//creo cincuenta elementos para setear el orden z
		for (int i = 0; i < 50 ; i++){
		JLabel el = new JLabel ();
		el.setBounds(1,1,1,1);
		el.setVisible(false);
		panelppal.add(el);
		panelppal.setComponentZOrder(el, i);
		}
	}
	/**
	 * cargarPantalla
	 * reinicializa los hilos de tablero y de puntaje
	 * arranca el sonido 
	 */
	private void cargarPantalla()
	{//el boton jugar da inicio al juego (se inicia la horda de Rollings)
		nombre.setVisible(false);
		nombre.setEnabled(false);
		nombre.setEditable(false);
		nomb.setVisible(false);
		nomb.setEnabled(false);
		
	habilitarBotones();
	Puntaje.setVisible(true);
	int ori,des;
	btnJugar.setEnabled(false);
	btnJugar.setVisible(false);
	getContentPane().setEnabled(true);
	
	//tablero inicia la horda de rollins con su propio hilo de ejecucion
	new Thread(J.getTablero()).start();
	//inicializo un thread con sonido para que caigan los submarinos
	new Thread(J.getPuntaje()).start();
	//hacemos visibles los botones selectores de los beatles, siempre y cuando el puntaje premita crearlos
	
	Puntaje.setVisible(true);
	//seteamos el JLabel del puntaje
	Puntaje.setText(J.getPuntaje().get()+"");
	habilitarBotones();
	
	
	//sonido
	empezar=new Sonido("hereCome");
	empezar.start();
	perder=new Sonido("theEnd");
	ganar=new Sonido ("ALL");
	}
	/**
	 *  generarMusica
	 *  genera los submarinos con los cuales el jugador podra comprar los beatles
	 */
	public void generarMusica () {
		terminoElJuego = false;
	//genera la musica con el cual el jugador podra comprar beatles
	Random r = new Random();

	//delay inicial de 3 segundos
	try {Thread.sleep(3000);} catch (InterruptedException e ){}
	
	//este bucle generara submarinos
	while (!terminoElJuego){
		//delay entre submarino y submarino
		try{Thread.sleep(3000);}catch (InterruptedException e ){ }
		int ub = Math.abs(r.nextInt())%3;
		int ubicacion [] = {50, 450, 600};
		submarino = new JLabel();
		//le pedimos a juego un submarino
		submarino S = J.getSubmarino();
		final int valor = S.getValor();
		submarino.addMouseListener(new MouseListener()
		{public void mouseClicked(MouseEvent arg0) {
			/**J.getPuntaje().aumentar(valor);
			new Sonido("points").start();
			Puntaje.setText(J.getPuntaje().get()+"");
			submarino.setVisible(false);
			submarino.setEnabled(false);
			habilitarBotones();**/
			}
		public void mouseEntered(MouseEvent arg0) {	}
		public void mouseExited(MouseEvent arg0) {}
		public void mousePressed(MouseEvent arg0) {
			J.getPuntaje().aumentar(valor);
			new Sonido("points").start();
			Puntaje.setText(J.getPuntaje().get()+"");
			submarino.setVisible(false);
			submarino.setEnabled(false);
			habilitarBotones();
		}
		public void mouseReleased(MouseEvent arg0) {}});

		
		submarino.setVisible(true);
		submarino.setIcon(new ImageIcon(getClass().getClassLoader().getResource("gif/ysublento.gif")));
		submarino.setBounds(ubicacion[ub], 10, 88, 70);
		panelppal.add(submarino);
		panelppal.setComponentZOrder(submarino, 0);
	
		//hacemos caer cada submarino
		int i = 10;
		while ( i <600 && !terminoElJuego )
			{submarino.setLocation(ubicacion[ub],i);
			try{Thread.sleep(70);}catch (InterruptedException e ){ }
			i=i+5;
			}//while de caida de cada submarino
	}//while
	submarino.setVisible(false);
	submarino.setEnabled(false);
	
	}
	/**
	 * aparecerBeatle
	 * @param b beatle
	 * @param casillero casillero
	 * aparece un beatle en la pantalla
	 */
	public void aparecerBeatle(beatle b, Etiqueta casillero){
		//hace aparecer en la pantalla el beatle seleccionado
		JLabel beatle= new JLabel();
		if (b!=null){
			if ( casillero!=null && !casillero.getTieneBeatle()){
			J.getPuntaje().disminuir(b.getValor());
			Puntaje.setText(J.getPuntaje().get()+"");
			habilitarBotones();
		beatle.setIcon(new ImageIcon(getClass().getClassLoader().getResource(b.getGif())));
		beatle.setBounds(casillero.getBounds());
		beatle.setVisible(true);
		new Sonido("plant").start();
		panelppal.add(beatle);
		
		// paso X Y a lospersonajes..
		b.setX(casillero.getX());
		b.setY(casillero.getY());
		int fila = J.getTablero().yNuevo(b.getY());
		//le decimos a tablero que se creo un beatle
		J.getTablero().crearBeatle(b,fila);
		//agregamos al mapeo 	
		try {
			mapeo.put (b.hashCode() , beatle);
		} catch (InvalidKeyException e) {	} 
		
		b.nacer();
		b.setE(casillero);
		casillero.setTieneBeatle(true);
		currentBeatle=null;
		habilitarCampos(false);
		}}}
	/**
	 * desaparecerBeatle		
	 * @param b beatle
	 * desaparece beatle b de la pantalla
	 */
	public void desaparecerBeatle (beatle b){
		if(b!=null){
		try {mapeo.get(b.hashCode()).setVisible(false);
		
		panelppal.remove(mapeo.get(b.hashCode()));
		}
		catch (InvalidKeyException e) {}
		b.getE().setTieneBeatle(false);
		
	}}
	/**
	 * aparecerDisparo
	 * @param d disparo
	 * aparece un disparo en la pantalla
	 */
	public void aparecerDisparo (disparo d){
		if (d!=null && d.getBeatle().getVida()>0){
		JLabel dis = new JLabel ();
		dis.setIcon(new ImageIcon(getClass().getClassLoader().getResource(d.getGif())));
		dis.setBounds(d.getX(), d.getY(),50 ,50);
		dis.setVisible(true);
		d.sonidoDisparo().start();
		panelppal.add(dis);
		try {
		mapeo.put(d.hashCode(), dis);
		} catch (InvalidKeyException e) {}
	}}
	/**
	 * desaparecerDisparo
	 * @param d disparo
	 * desaparece graficamente el disparo d
	 */
	public void desaparecerDisparo(disparo d){
		if (d!=null){
			try {//lo hacemos invisible y lo borramos
				JLabel disp = mapeo.get(d.hashCode());
				if (disp != null)
				{	disp.setVisible(false);
					//lo sacamos del panel prinicipal	
					panelppal.remove(mapeo.get(d.hashCode()));
					mapeo.remove(d.hashCode());
				}	
			} catch (InvalidKeyException e) {}
		}
	}
	/** 
	 * aparecer
	 * @param r rolling
	 * @param fila fila
	 * aparece un rolling en determinada fila
	 */
	public void aparecer (rolling r, int fila)
	{//hace aparecer en la pantalla un rolling
	JLabel rollinga = new JLabel ();
	rollinga.setIcon(new ImageIcon(getClass().getClassLoader().getResource(r.getGif())));
	
	int x = 760 ;
	int y = 0;
	int z = 0 ;
	//la fila va desde 1 a 5
	switch (fila){
	case  1 : {y = 50;z=45;break;}
	case 2 : {y = 150;z =35; break;}
	case 3 : {y = 250; z=25;break;}
	case 4 : {y = 350; z=15;break;}
	case 5 : {y = 450; z = 5 ;break;}
	}
	rollinga.setBounds (x,y,85,140);
	
	//seteamos la ubicacion del personaje
	r.setX(x);
	r.setY(y);
	
	//agregamos al panel
	panelppal.add(rollinga);
	//System.out.println(panelppal.getComponentZOrder(rollinga));
	panelppal.setComponentZOrder(rollinga, z);
	//System.out.println(panelppal.getComponentZOrder(rollinga));
	
	//agregamos al mapeo 	
	try {mapeo.put (r.hashCode() , rollinga); }
	catch (InvalidKeyException e) {}
	}
	/**
	 * perder
	 * aparecen imagenes que indican al jugador que perdio y la musica cambia
	 */
	public void perder() 
	{//musica 
	empezar.stop();
	perder.start();
	
	loser.setVisible(true);
	panelppal.setComponentZOrder(loser, 0);
	perdio.setVisible(true);
	panelppal.setComponentZOrder(perdio, 0);

	//paramos los submarinos
	terminoElJuego = true;
	}
	/** 
	 * reintentar
	 * se detiene la musica y se resetean componentes graficos.
	 */
	private void reintentar() 
	{//musica
	perder.stop();
	
	//pantallas botones

	PuntajeFinal.setText("");
	PuntajeFinal.setVisible(false);
	loser.setVisible(false);
	perdio.setVisible(false);
	ganaste.setVisible(false);
	ganar.stop();
	Puntaje.setText("100");
	J.reiniciarPuntaje();

	nombre.setText("");
	nombre.setVisible(true);
	nombre.setEnabled(true);
	nombre.setEditable(true);

	nomb.setVisible(true);
	nomb.setEnabled(true);
	
	btnJugar.setEnabled(false);
	btnJugar.setVisible(true);
	btnjohn.setEnabled(false);
	btnpaul.setEnabled(false);
	btngeorge.setEnabled(false);
	btnringo.setEnabled(false);
	btnyoko.setEnabled(false);
	Puntaje.setVisible(false);
	getContentPane().setEnabled(true);
	J.getTablero().reintentar();
	submarino.setVisible(false);
	inicializarCampos();
	try {Thread.sleep(9000); }	catch (InterruptedException e ) {}
	
	
	
	}
	/**
	 * avanar
	 * @param ro rolling
	 * avanza al rolling ro hacia la izquierda
	 */
	public void avanzar(rolling ro) 
	{//avanza de a 6 pixeles cada rolling
	JLabel ti;
	try{
		ti = mapeo.get(ro.hashCode());
		int x=0;
		if (ro != null){
			 x = ro.getX();
		x=x-6;}
		// y queda constante
		int y = ti.getY();
		ti.setLocation(x, y );
		ro.setX(x);
		}
	catch (InvalidKeyException e) {	}
	}
	/**
	 * generarCampos
	 * @param L etiqueta
	 * @param x 
	 * @param y
	 * sirve para generar los campos en donde se hubicaran los beatles graficamente
	 */
	private void generarCampos(Etiqueta L, int x , int y){
		final Etiqueta prueba=L;
				prueba.setBounds(x, y, 80,95);
				prueba.setVisible(false);
				prueba.setEnabled(true);
				prueba.addMouseListener(new MouseListener()
				{public void mouseClicked(MouseEvent arg0) {
					aparecerBeatle(currentBeatle,prueba);}

				@Override
				public void mouseEntered(MouseEvent arg0) {
					prueba.setBorder(new LineBorder(Color.pink));
				}

				@Override
				public void mouseExited(MouseEvent arg0) {
					prueba.setBorder(null);
				}

				@Override
				public void mousePressed(MouseEvent arg0) {}

				@Override
				public void mouseReleased(MouseEvent arg0) {}});
				
				panelppal.add(prueba);
				
	}

	/** 
	 * habilitarCampos		
	 * @param b booleano
	 * setea todos los campos como visibles o invisibles
	 */
	private void habilitarCampos(boolean b){
		
		for(Etiqueta e:mapeoCasilleros.keys()){
			e.setVisible(b);}
		}
	/**
	 * crearCampos
	 * crea los campos que contendran a los beatles
	 */
	private void crearCampos(){
		l00=new Etiqueta();
		try {
			mapeoCasilleros.put(l00, l00);
		} catch (InvalidKeyException e) {}
		l01= new Etiqueta();
		try {
			mapeoCasilleros.put(l01, l01);
		} catch (InvalidKeyException e) {}
		l02= new Etiqueta();
		try {
			mapeoCasilleros.put(l02, l02);
		} catch (InvalidKeyException e) {}
		l03=new Etiqueta();
		try {
			mapeoCasilleros.put(l03, l03);
		} catch (InvalidKeyException e) {}
		l04=new Etiqueta();
		try {
			mapeoCasilleros.put(l04, l04);
		} catch (InvalidKeyException e) {}
		l10=new Etiqueta();
		try {
			mapeoCasilleros.put(l10, l10);
		} catch (InvalidKeyException e) {}
		l11= new Etiqueta();
		try {
			mapeoCasilleros.put(l11, l11);
		} catch (InvalidKeyException e) {}
		l12= new Etiqueta();
		try {
			mapeoCasilleros.put(l12, l12);
		} catch (InvalidKeyException e) {}
		l13=new Etiqueta();
		try {
			mapeoCasilleros.put(l13, l13);
		} catch (InvalidKeyException e) {}
		l14=new Etiqueta();
		try {
			mapeoCasilleros.put(l14, l14);
		} catch (InvalidKeyException e) {}
		l20=new Etiqueta();
		try {
			mapeoCasilleros.put(l20, l20);
		} catch (InvalidKeyException e) {}
		l21= new Etiqueta();
		try {
			mapeoCasilleros.put(l21, l21);
		} catch (InvalidKeyException e) {}
		l22= new Etiqueta();
		try {
			mapeoCasilleros.put(l22, l22);
		} catch (InvalidKeyException e) {}
		l23=new Etiqueta();
		try {
			mapeoCasilleros.put(l23, l23);
		} catch (InvalidKeyException e) {}
		l24=new Etiqueta();
		try {
			mapeoCasilleros.put(l24, l24);
		} catch (InvalidKeyException e) {}
		l30=new Etiqueta();
		try {
			mapeoCasilleros.put(l30, l30);
		} catch (InvalidKeyException e) {}
		l31= new Etiqueta();
		try {
			mapeoCasilleros.put(l31, l31);
		} catch (InvalidKeyException e) {}
		l32= new Etiqueta();
		try {
			mapeoCasilleros.put(l32, l32);
		} catch (InvalidKeyException e) {}
		l33=new Etiqueta();
		try {
			mapeoCasilleros.put(l33, l33);
		} catch (InvalidKeyException e) {}
		l34=new Etiqueta();
		try {
			mapeoCasilleros.put(l34, l34);
		} catch (InvalidKeyException e) {}
		l40=new Etiqueta();
		try {
			mapeoCasilleros.put(l40, l40);
		} catch (InvalidKeyException e) {}
		l41= new Etiqueta();
		try {
			mapeoCasilleros.put(l41, l41);
		} catch (InvalidKeyException e) {}
		l42= new Etiqueta();
		try {
			mapeoCasilleros.put(l42, l42);
		} catch (InvalidKeyException e) {}
		l43=new Etiqueta();
		try {
			mapeoCasilleros.put(l43, l43);
		} catch (InvalidKeyException e) {}
		l44=new Etiqueta();
		try {
			mapeoCasilleros.put(l44, l44);
		} catch (InvalidKeyException e) {}
		l50=new Etiqueta();
		try {
			mapeoCasilleros.put(l50, l50);
		} catch (InvalidKeyException e) {}
		l51= new Etiqueta();
		try {
			mapeoCasilleros.put(l51, l51);
		} catch (InvalidKeyException e) {}
		l52= new Etiqueta();
		try {
			mapeoCasilleros.put(l52, l52);
		} catch (InvalidKeyException e) {}
		l53=new Etiqueta();
		try {
			mapeoCasilleros.put(l53, l53);
		} catch (InvalidKeyException e) {}
		l54=new Etiqueta();
		try {
			mapeoCasilleros.put(l54, l54);
		} catch (InvalidKeyException e) {}
		l60=new Etiqueta();
		try {
			mapeoCasilleros.put(l60, l60);
		} catch (InvalidKeyException e) {}
		l61= new Etiqueta();
		try {
			mapeoCasilleros.put(l61, l61);
		} catch (InvalidKeyException e) {}
		l62= new Etiqueta();
		try {
			mapeoCasilleros.put(l62, l62);
		} catch (InvalidKeyException e) {}
		l63=new Etiqueta();
		try {
			mapeoCasilleros.put(l63, l63);
		} catch (InvalidKeyException e) {}
		l64=new Etiqueta();
		try {
			mapeoCasilleros.put(l64, l64);
		} catch (InvalidKeyException e) {}
		l70=new Etiqueta();
		try {
			mapeoCasilleros.put(l70, l70);
		} catch (InvalidKeyException e) {}
		l71= new Etiqueta();
		try {
			mapeoCasilleros.put(l71, l71);
		} catch (InvalidKeyException e) {}
		l72= new Etiqueta();
		try {
			mapeoCasilleros.put(l72, l72);
		} catch (InvalidKeyException e) {}
		l73=new Etiqueta();
		try {
			mapeoCasilleros.put(l73, l73);
		} catch (InvalidKeyException e) {}
		l74=new Etiqueta();
		try {
			mapeoCasilleros.put(l74, l74);
		} catch (InvalidKeyException e) {}
		l80=new Etiqueta();
		try {
			mapeoCasilleros.put(l80, l80);
		} catch (InvalidKeyException e) {}
		l81= new Etiqueta();
		try {
			mapeoCasilleros.put(l81, l81);
		} catch (InvalidKeyException e) {}
		l82= new Etiqueta();
		try {
			mapeoCasilleros.put(l82, l82);
		} catch (InvalidKeyException e) {}
		l83=new Etiqueta();
		try {
			mapeoCasilleros.put(l83, l83);
		} catch (InvalidKeyException e) {}
		l84=new Etiqueta();
		try {
			mapeoCasilleros.put(l84, l84);
		} catch (InvalidKeyException e) {}
		
		
		inicializarCampos();}
	/**
	 * inicializarCampos
	 * inicializa los campos que contendran a los beatles
	 */
	private void inicializarCampos(){

		generarCampos(l00,35,85);
		generarCampos(l01,35,180);
		generarCampos(l02,35,275);
		generarCampos(l03,35,375);
		generarCampos(l04,35,475);
		
		generarCampos(l10,115,85);
		generarCampos(l11,115,180);
		generarCampos(l12,115,275);
		generarCampos(l13,115,375);
		generarCampos(l14,115,475);
		
		generarCampos(l20,195,85);
		generarCampos(l21,195,180);
		generarCampos(l22,195,275);
		generarCampos(l23,195,375);
		generarCampos(l24,195,475);
		
		generarCampos(l30,275,85);
		generarCampos(l31,275,180);
		generarCampos(l32,275,275);
		generarCampos(l33,275,375);
		generarCampos(l34,275,475);
		
		generarCampos(l40,355,85);
		generarCampos(l41,355,180);
		generarCampos(l42,355,275);
		generarCampos(l43,355,375);
		generarCampos(l44,355,475);
		
		generarCampos(l50,435,85);
		generarCampos(l51,435,180);
		generarCampos(l52,435,275);
		generarCampos(l53,435,375);
		generarCampos(l54,435,475);
		
		generarCampos(l60,515,85);
		generarCampos(l61,515,180);
		generarCampos(l62,515,275);
		generarCampos(l63,515,375);
		generarCampos(l64,515,475);
		
		generarCampos(l70,595,85);
		generarCampos(l71,595,180);
		generarCampos(l72,595,275);
		generarCampos(l73,595,375);
		generarCampos(l74,595,475);
		
		generarCampos(l80,675,85);
		generarCampos(l81,675,180);
		generarCampos(l82,675,275);
		generarCampos(l83,675,375);
		generarCampos(l84,675,475);
		
		
		
	}
	/**
	 * nuevoPaul
	 * crea un nuevo paul avisandole a tablero 
	 */
	private void nuevoPaul(){

		paul p=new paul(J.getTablero());
		//J.getTablero().crearBeatle(p);
		currentBeatle=p;}
	/**
	 * nuevoJohn
	 * crea un nuevo John avisandole a tablero 
	 */
	private void nuevoJohn(){
		john j=new john(J.getTablero());
		//J.getTablero().crearBeatle(j);
		currentBeatle=j;}
	/**
	 * nuevoGeorge
	 * crea un nuevo george avisandole a tablero 
	 */
	private void nuevoGeorge(){
		george g=new george(J.getTablero());
		//J.getTablero().crearBeatle(g);
		currentBeatle=g;}
	/**
	 * nuevoRingo
	 * crea un nuevo Ringo avisandole a tablero 
	 */
	private void nuevoRingo(){
		ringo r=new ringo(J.getTablero());
		//J.getTablero().crearBeatle(r);
		currentBeatle=r;}
	/**
	 * nuevoYoko
	 * crea un nuevo Yoko avisandole a tablero 
	 */
	private void nuevoYoko(){
		yoko y=new yoko(J.getTablero());
		//J.getTablero().crearBeatle(y);
		currentBeatle=y;}
	/**
	 * habilitarBotones
	 * habilita los botones que crean los beatles
	 */
	private void habilitarBotones(){
		int ori, des;
		
		des= Integer.parseInt(Puntaje.getText());
		ori= Integer.parseInt(PP.getText());
		if (ori>des)
			btnpaul.setEnabled(false);
		else
			btnpaul.setEnabled(true);
		ori= Integer.parseInt(PJ.getText());
		if (ori>des)
			btnjohn.setEnabled(false);
		else
			btnjohn.setEnabled(true);
		ori= Integer.parseInt(PG.getText());
		if (ori>des)
			btngeorge.setEnabled(false);
		else
			btngeorge.setEnabled(true);
		ori= Integer.parseInt(PR.getText());
		if (ori>des)
			btnringo.setEnabled(false);
		else
			btnringo.setEnabled(true);
		ori= Integer.parseInt(PY.getText());
		if (ori>des)
			btnyoko.setEnabled(false);
		else
			btnyoko.setEnabled(true);
	}
	/**
	 *avanzar 
	 * @param d disparo
	 * avanza el disparo hacia la derecha
	 */
	public void avanzar (disparo d){
		JLabel ti;
		if (d != null){
		try{
			ti = mapeo.get(d.hashCode());
		
			int x = 0;
			if (ti != null)
				{x = ti.getX();
				x = x +6 ;
				// y queda constante
				int y = ti.getY();
				ti.setLocation(x, y );
				d.setX(x);}
		
		

		}catch (InvalidKeyException e) {}		
		}
}	
	/**
	 * aparecerSubmarinoDePaul
	 * @param sub submarino
	 * hace aparecer un submarino de paul en los pies del mismo
	 */
	public void aparecerSubmarinoDePaul( submarino sub) {
	if (J.getTablero().sigueElJuego()){	
		final JLabel submarin = new JLabel();
		submarin.setVisible(true);
		submarin.setIcon(new ImageIcon(getClass().getClassLoader().getResource("gif/ysublento.gif")));
		submarin.setBounds(sub.getBeatle().getX(), sub.getBeatle().getY()+50, 88, 70);
		new Sonido("submarine").start();
		panelppal.add(submarin);
		panelppal.setComponentZOrder(submarin, 0);
		final int valor = sub.getValor();
		submarin.addMouseListener(new MouseListener()
		{public void mouseClicked(MouseEvent arg0) {
			int ori,des;
			J.getPuntaje().aumentar(valor);
			new Sonido("points").start();
			Puntaje.setText(J.getPuntaje().get()+"");
			submarin.setVisible(false);
			submarin.setEnabled(false);
			habilitarBotones();
			}
		public void mouseEntered(MouseEvent arg0) {	}
		public void mouseExited(MouseEvent arg0) {}
		public void mousePressed(MouseEvent arg0) {}
		public void mouseReleased(MouseEvent arg0) {}});

		
		
		try {
			mapeo.put(sub.hashCode(), submarin);
		} catch (InvalidKeyException e) {}
	}
	}
	/**
	 * desaparecerSubmarino
	 * @param sub submarino
	 * desaparece graficmente un submarino
	 */
	public void desaparecerSubmarino (submarino sub){
		JLabel s=null;
		try {	s = mapeo.get(sub.hashCode());	} catch (InvalidKeyException e) {	}
		if (s != null){
		s.setVisible(false);
		s.setEnabled(false);
		panelppal.remove(s);
		}
	}
	/**
	 * muerteRolling
	 * @param r rolling
	 * cuando muere un rolling aparece una determinada imagen que dura un lapso determinado
	 */
	public void muerteRolling(rolling r){
	
		if (r!=null){
			try {
				mapeo.get(r.hashCode()).setIcon(new ImageIcon(getClass().getClassLoader().getResource(r.getGifMorir())));
				new Sonido("explosion").start();
			} catch (InvalidKeyException e){}
			
		}
		
		try {Thread.sleep(1500);} catch (InterruptedException e ){}
			
	}
	/**
	 * desaparecerRolling 
	 * @param r rolling
	 * desaparece graficamente el rolling
	 */
	public void desaparecerRolling(rolling r) {
		{
			if(r!=null){
			try {mapeo.get(r.hashCode()).setVisible(false);
			panelppal.remove(mapeo.get(r.hashCode()));
			}
			catch (InvalidKeyException e) {}
		}}
		
		
	}
	/**
	 * retrocederRolling
	 * @param ro rolling
	 * retrocede el rolling a la derecha
	 */
	public void retrocederRolling(rolling ro) {
		{//retrocede de a 10 pixeles cada rolling
			JLabel ti;
			try{
				ti = mapeo.get(ro.hashCode());
				int x=0;
				if (ro != null){
					 x = ro.getX();
				x=x+10;}
				// y queda constante
				int y = ti.getY();
				ti.setLocation(x, y );
				ro.setX(x);
				}
			catch (InvalidKeyException e) {	}
			}

				
	}
	/**
	 * cambiarImagenAtaque
	 * @param ro rolling
	 * se cambia la imagen de un rolling cuando esta atacando a un beatle
	 */
	public void cambiarImagenAtaque(rolling ro) {
		if (ro != null)
		{	JLabel ti;
		try{
			ti = mapeo.get(ro.hashCode());
			ti.setIcon(new ImageIcon(getClass().getClassLoader().getResource(ro.getGifAtaque())));
			ro.getSonidoAtaque().start();
		}catch (InvalidKeyException e) {	}
	}
}
	/**
	 * cambiarImagenNormal
	 * @param ro rolling
	 * se cambia la imagen del rolling a su imagen habitual
	 */
	public void cambiarImagenNormal(rolling ro) {
		if (ro != null)
		{	JLabel ti;
		try{
			ti = mapeo.get(ro.hashCode());
			ti.setIcon(new ImageIcon(getClass().getClassLoader().getResource(ro.getGif())));
			
		}catch (InvalidKeyException e) {	}
	}}
	/**
	 * cambiarImagenTraidor
	 * @param ro rolling
	 * se cambia la imagen del rolling a una imagen igual pero caminando hacia el otro lado
	 */
	public void cambiarImagenTraidor(rolling ro) {
		if (ro != null)
		{	JLabel ti;
		try{
			ti = mapeo.get(ro.hashCode());
			ti.setIcon(new ImageIcon(getClass().getClassLoader().getResource(ro.getGifTraidor())));
			
		}catch (InvalidKeyException e) {	}
	}
}
	/**
	 * ganar
	 * cambia la musica
	 * aparece una imagen indicando que gano y su puntaje
	 */
	public void ganar() {
		try{Thread.sleep(3000);}catch (InterruptedException e ){ }

		empezar.stop();
		ganar.start();
		//paramos los submarinos
		terminoElJuego = true;
		perdio.setVisible(true);
		PuntajeFinal.setText(J.getNombre() + ": tu puntaje es "+ J.getPuntaje().get());
		PuntajeFinal.setForeground(Color.white);
		PuntajeFinal.setBounds(300,100,250,15);
		PuntajeFinal.setVisible(true);
		ganaste.setIcon(new ImageIcon(getClass().getClassLoader().getResource("gif/ganaste.jpg")));

		panelppal.add(ganaste);
		panelppal.setComponentZOrder(ganaste, 0);
		ganaste.setVisible(true);
		ganaste.setBounds(100, 100,600 ,351);
	}
		
	
}

